home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / CC_C / 0574.ZIP / PUTW.ASM < prev    next >
Assembly Source File  |  1986-08-28  |  964b  |  70 lines

  1. include compiler.inc
  2.  
  3.     ttl    PUTW, 1.03, 08-03-86 clr
  4.  
  5.  
  6. ;word output to stream
  7.  
  8.     dseg
  9.     extrn    _ftb:byte
  10.  
  11.     cseg
  12.  
  13.     xtfs    <write,$strhand>
  14.  
  15.     procdef    putw, <<wrd, word>, <strm, ptr>>
  16.  
  17.     locs    <<fhdl, word>>
  18.  
  19.     pushreg
  20.     pushds
  21.  
  22.     callit    $strhand <<strm,ptr>>
  23.     inc    ax
  24.     jz    seteof
  25.     dec    ax
  26.     mov    di,ax            ;handle to DI
  27.  
  28.     ldptr    si, strm        ;stream
  29.     test    bl, 2
  30.     jz    seteof            ;not open for writing
  31.     test    bl, 10h
  32.     jz    ok            ;no prev error
  33. seteof:    mov    ax, -1
  34.     mov    wrd, ax
  35.     jmp    short fini
  36. ;
  37. ok:    mov    ax, wrd
  38.     cmp    ax, -1
  39.     jz    fini
  40.     mov    ax, wrd            ;word to send
  41.     mov    fhdl,ax
  42.     lea    si,fhdl
  43.     mov    bx,2
  44.     callit    write,<<bx,reg>,<si,preg,ss>,<di,reg>>;
  45.  
  46.     ldptr    si, strm
  47.     cmp    ax, 1
  48.     jge    mkdrty
  49.     jnz    seterr        ;so set flags
  50.  
  51.     or    byte ptr 2[si], 08h    ;so set EOF
  52.     jmp    seteof
  53.  
  54. seterr:
  55.     or    byte ptr 2[si], 10h    ;so set ERROR
  56.     jmp    seteof
  57. ;
  58. mkdrty:
  59.     or    byte ptr 2[si], 80h
  60. fini:
  61.     mov    ax, wrd            ;return value
  62.     popds
  63.     pret
  64.  
  65.     pend    putw
  66.  
  67.     finish
  68.  
  69.     end
  70.